<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet"
        href="https://cdn.cnbj1.fds.api.mi-img.com/mi.com-assets/shop/pro/css/buy/cart2.e3e13dad.css">
    <script src="../js/vue.js"></script>
    <style>
        body {
            padding: 10px;
        }

        .checkbox {
            display: inline-block;

        }

        .checkbox .iconfont {
            display: inline-block;
            vertical-align: middle;
            font-style: normal;
            width: 20px;
            height: 20px;
            text-align: center;
            line-height: 20px;
            font-size: 20px;
            border: 1px solid #e0e0e0;
            user-select: none;
            color: #fff;
        }

        .checkbox .iconfont:hover {
            color: #757575;
        }

        .checkbox input:checked+.iconfont {
            background-color: #ff6700;
            border-color: #ff6700;
            color: #fff;
        }

        .checkbox input:checked+.iconfont+span {
            display: inline-block;
            line-height: 20px;
            vertical-align: middle;
        }
    </style>
</head>

<body>
    <div id="app">
        <div>
            <p>{{count}}</p>
            <button @click="count++">点击</button>
        </div>
        <hello></hello>
        <hr>
        <div>
            <!-- 父组件给子组件 除了传入传递的数据,还可以在标签内传入一些文本,html,组件结构 -->

            <!--text -->
            <!-- <my-checkbox v-model="bool">
                sing
            </my-checkbox> -->

            <!--html -->
            <!-- <my-checkbox v-model="bool">
                <b>sing</b>
            </my-checkbox> -->


            <!--模板语法 -->
            <!-- <my-checkbox v-model="bool">
                <b>{{count}}</b>
            </my-checkbox> -->

            <!--组件 -->
            <!-- <my-checkbox v-model="bool">
                <hello></hello>
            </my-checkbox> -->

            <!-- 后备内容(默认值) -->
            <my-checkbox v-model="bool"></my-checkbox>
        </div>

    </div>
</body>
<template id="myCheckbox">
    <div class="checkbox">
        <!--  input :checked => 是否选中-->
        <label>
            <input type="checkbox" :checked="checked" @change="$emit('change',$event.target.checked)" hidden>
            <i class="iconfont">√</i>
            <!-- slot 插槽 => 在组件中是一个占位符,该组件在被父组件/根组件调用时 可以在组件标签传入一些文本或html结构,模板语法,组件 => 这些文本或html结构,模板语法,组件会传入到组件内 替换slot标签 -->
            <span>
                <!-- 后备内容(默认值  -> 如果组件调用时没有传入任何任何插槽内容,使用后备内容) -->
                <slot>复选框</slot>
            </span>
        </label>
    </div>
</template>
<script>

    // slot 插槽 => 在组件中是一个占位符,该组件在被父组件/根组件调用时 可以在组件标签传入一些文本或html结构,模板语法,组件 => 这些文本或html结构,模板语法,组件会传入到组件内 替换slot标签

    // 注意:父级模板里的所有内容都是在父级作用域中编译的；子模板里的所有内容都是在子作用域中编译的。


    // 在组件上使用v-model => 目的: 将父组件动态传递的数据和组件内的input textarea select的值 进行双向数据绑定(变相)

    Vue.component("hello", {
        data() {
            return {}
        },
        template: `<div>hello</div>`,
    })

    Vue.component("my-checkbox", {
        model: {
            prop: "checked",  // v-model='bool' => 被组件接收之后传递给checked数据
            event: "change",  // v-model的触发事件(change  -> 也可以是自定义的事件)
        },
        props: {
            checked: Boolean,
            label: {
                type: String,
                default: "",
            },
        },
        data() {
            return {
            }
        },
        template: `#myCheckbox`,
        mounted() {
            console.log(this.checked);
        },
    })


    var vm = new Vue({
        el: "#app",
        data: {
            count: 1,
            bool: true,
        },
        watch: {
            bool(newVal) {
                console.log("bool发生改变", newVal);
            }
        },

    })

</script>

</html>